using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("Options")]
	public class Options : MonoClass
	{
		public static string DEPRECATED_NAME_PREFIX => MonoClass.smethod_8(TritonHs.MainAssemblyPath, "", "Options", "DEPRECATED_NAME_PREFIX");

		public static string FLAG_NAME_PREFIX => MonoClass.smethod_8(TritonHs.MainAssemblyPath, "", "Options", "FLAG_NAME_PREFIX");

		public static int FLAG_BIT_COUNT => MonoClass.smethod_6<int>(TritonHs.MainAssemblyPath, "", "Options", "FLAG_BIT_COUNT");

		public static float RCP_FLAG_BIT_COUNT => MonoClass.smethod_6<float>(TritonHs.MainAssemblyPath, "", "Options", "RCP_FLAG_BIT_COUNT");

		public static List<ServerOption> s_serverFlagContainers => MonoClass.smethod_7<Class250<ServerOption>>(TritonHs.MainAssemblyPath, "", "Options", "s_serverFlagContainers")?.method_25();

		public Options(IntPtr address, string className)
			: base(address, className)
		{
		}

		public Options(IntPtr address)
			: this(address, "Options")
		{
		}

		public static Options Get()
		{
			return MonoClass.smethod_15<Options>(TritonHs.MainAssemblyPath, "", "Options", "Get", Array.Empty<object>());
		}

		public bool IsClientOption(Option option)
		{
			return method_11<bool>("IsClientOption", new object[1] { option });
		}

		public bool IsServerOption(Option option)
		{
			return method_11<bool>("IsServerOption", new object[1] { option });
		}

		public bool IsServerOptionFlag(Option option)
		{
			return method_11<bool>("IsServerOptionFlag", new object[1] { option });
		}

		public Type GetOptionType(Option option)
		{
			return method_14<Type>("GetOptionType", new object[1] { option });
		}

		public Type GetServerOptionType(ServerOption serverOption)
		{
			return method_14<Type>("GetServerOptionType", new object[1] { serverOption });
		}

		public bool HasOption(Option option)
		{
			return method_11<bool>("HasOption", new object[1] { option });
		}

		public void DeleteOption(Option option)
		{
			method_8("DeleteOption", option);
		}

		public object GetOption(Option option)
		{
			return method_15<object>("GetOption", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public object GetOption(Option option, object defaultVal)
		{
			return method_15<object>("GetOption", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.Class
			}, new object[2] { option, defaultVal });
		}

		public bool GetBool(Option option)
		{
			return method_10<bool>("GetBool", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public bool GetBool(Option option, bool defaultVal)
		{
			return method_10<bool>("GetBool", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean
			}, new object[2] { option, defaultVal });
		}

		public int GetInt(Option option)
		{
			return method_10<int>("GetInt", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public int GetInt(Option option, int defaultVal)
		{
			return method_10<int>("GetInt", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.I4
			}, new object[2] { option, defaultVal });
		}

		public long GetLong(Option option)
		{
			return method_10<long>("GetLong", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public long GetLong(Option option, long defaultVal)
		{
			return method_10<long>("GetLong", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.I8
			}, new object[2] { option, defaultVal });
		}

		public float GetFloat(Option option)
		{
			return method_10<float>("GetFloat", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public float GetFloat(Option option, float defaultVal)
		{
			return method_10<float>("GetFloat", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.R4
			}, new object[2] { option, defaultVal });
		}

		public ulong GetULong(Option option)
		{
			return method_10<ulong>("GetULong", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { option });
		}

		public ulong GetULong(Option option, ulong defaultVal)
		{
			return method_10<ulong>("GetULong", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.U8
			}, new object[2] { option, defaultVal });
		}

		public string GetString(Option option)
		{
			return method_12("GetString", new Class276.Enum20[1] { Class276.Enum20.ValueType }, option);
		}

		public string GetString(Option option, string defaultVal)
		{
			return method_12("GetString", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.String
			}, option, defaultVal);
		}

		public void SetOption(Option option, object val)
		{
			method_8("SetOption", option, val);
		}

		public void SetBool(Option option, bool val)
		{
			method_8("SetBool", option, val);
		}

		public void SetInt(Option option, int val)
		{
			method_8("SetInt", option, val);
		}

		public void SetLong(Option option, long val)
		{
			method_8("SetLong", option, val);
		}

		public void SetFloat(Option option, float val)
		{
			method_8("SetFloat", option, val);
		}

		public void SetULong(Option option, ulong val)
		{
			method_8("SetULong", option, val);
		}

		public void SetString(Option option, string val)
		{
			method_8("SetString", option, val);
		}

		public void Initialize()
		{
			method_8("Initialize");
		}

		public bool HasServerOptionFlag(ServerOptionFlag serverOptionFlag)
		{
			return method_11<bool>("HasServerOptionFlag", new object[1] { serverOptionFlag });
		}

		public void DeleteClientOption(Option option, string optionName)
		{
			method_8("DeleteClientOption", option, optionName);
		}

		public void DeleteServerOption(Option option, ServerOption serverOption)
		{
			method_8("DeleteServerOption", option, serverOption);
		}

		public void DeleteServerOptionFlag(Option option, ServerOptionFlag serverOptionFlag)
		{
			method_8("DeleteServerOptionFlag", option, serverOptionFlag);
		}

		public object GetClientOption(Option option, string optionName)
		{
			return method_14<object>("GetClientOption", new object[2] { option, optionName });
		}

		public object GetServerOption(Option option, ServerOption serverOption)
		{
			return method_14<object>("GetServerOption", new object[2] { option, serverOption });
		}

		public void RemoveListeners(Option option, object prevVal)
		{
			method_8("RemoveListeners", option, prevVal);
		}

		public void FireChangedEvent(Option option, object prevVal, bool existed)
		{
			method_8("FireChangedEvent", option, prevVal, existed);
		}

		public FormatType GetFormatType()
		{
			return method_11<FormatType>("GetFormatType", Array.Empty<object>());
		}

		public bool GetInRankedPlayMode()
		{
			return method_11<bool>("GetInRankedPlayMode", Array.Empty<object>());
		}
	}
}
